import Vue from 'vue'
import App from './App.vue'

import router from './router'
import VueRouter from 'vue-router'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import store from "./store";
import Vuex from 'vuex'
import ApiReg from "@/assets/js/post.js";
import VueHtmlToPaper from 'vue-html-to-paper'
import options from './assets/js/const'
import dateAndTime from "@/utils/dateAndTime";
import log from "@/utils/log";

//import $ from 'jquery'
import x2js from 'x2js' //xml数据处理插件

import "babel-polyfill"
import Es6Promise from 'es6-promise'
import Router from "vue-router";
require('es6-promise').polyfill()
Es6Promise.polyfill()

Vue.prototype.$x2js = new x2js()                        // 创建x2js对象，挂到vue原型上
Vue.prototype.dateAndTime = dateAndTime                 // 将日期时间相关方法挂载到Vue原型上
Vue.prototype.log = log                                 // 将log相关方法挂载到Vue原型上

Vue.use(VueHtmlToPaper, options);
Vue.use(ElementUI)
Vue.use(VueRouter)
Vue.use(Vuex)

// 引用axios，并设置基础URL为后端服务api地址
let axios = require('axios')
// axios.defaults.baseURL = 'http://123.57.211.23:8080'           // 部署时用的后端地址
axios.defaults.baseURL = 'http://localhost:81'                    // 本地测试用的后端地址
axios.defaults.headers.post['Content-Type']='application/x-www-form-urlencoded;charset=utf-8';


new Vue({
  el:'#app',
  router,
  store,
  render: h => h(App),
}).$mount('#app')


// 请求拦截器
axios.interceptors.request.use(
    config=>{
        if (store.state.token){
            config.headers.common['openToken'] = store.state.token
        }
        return config
    },
    error => {
        // 对请求错误做什么
        return Promise.reject(error)
    }
)

// http response相应拦截器
axios.interceptors.response.use(
    response=>{
        // 这里面写响应拦截处理代码

        return response;
    },
    error => {
        if (error.response){
            switch (error.response.status){
               // 这里面根据错误状态码进行处理
            }
        }
    }
)


// 将API方法绑定到全局
Vue.prototype.$axiosnew = axios
Vue.prototype.$axios = ApiReg
Vue.config.productionTip = false


// 上述绑定方法在vue组件中的使用如下:
// this.dateAndTime.方法名()
// this.log.方法名(方法参数)
// this.$axios.方法名                  => 见BuyMeasurement.js
// this.$axiosnew(参数)                => 见settingsApi.js
// 如果是在js中可以这样调用:  Vue.prototype.$axiosnew(参数)、Vue.prototype.dateAndTime.方法名()
